Software has become a vital aspect of modern life and, as a consequence, its high-quality is a major concern. Software development is a distributed effort involving tens if not hundreds of developers and thousands of lines of code. The larger the software project, the greater the number of individuals adding, editing, and testing code. It is recognized that tools are needed in the software development and testing process to allow IT project managers to improve productivity, improve quality, reliability and reduce expenditure.
Typical software analysis tools provide the ability to independently analyze software code statically and dynamically. Static analysis can identify correctness issues in code without actually executing that code, through techniques such as data flow analysis, value tracking, and the like. Dynamic analysis can provide information pertaining to timing and how much memory is allocated, for example.
Yet, the tools available to quickly identify and prioritize quality issues within software projects have been limited. Major advances have been made by the scientific community in designing techniques which help developers to independently improve the quality of their software. However, an aspect for achieving software quality is the ability to measure not only an individual's software development but the overall software project. Despite many efforts, the goal of finding effective quantitative, objective quality measurements of software has remained elusive. Many important concepts in software quality assurance (SQA), although derived from good intuition and collective experience, do not lend themselves easily to measurement. Nevertheless, quantitative, objective measurements are needed, since they provide a concrete means to communicate, reproduce, analyze, and compare individual outcomes. Assessing or measuring software quality, particularly with respect to large scale software projects, has so far resisted meaningful or practical, processor executed algorithmic analysis.